boto3でS3バケットのブロックパブリックアクセスを設定する

boto3でS3バケットのブロックパブリックアクセスを設定する

S3バケットのブロックパブリックアクセスを設定するスクリプトを作成&実行してみました。
Clock Icon2024.08.13

昔々に作ったS3バケットは、ブロックパブリックアクセスがデフォルトでオフになっています(だったはず……)。この設定をオンにしようと思いましたが、対象のS3バケットがたくさんあるのでboto3を使って簡単に設定してみました。

おすすめの方

  • boto3でS3バケットのブロックパブリックアクセスを設定したい方

ブロックパブリックアクセスがオフになっている

まずは現状を確認しておきます。

01_s3_bucket

ちなみに、AWS Security Hubでも検出されています。

02_security_hub

スクリプトを作成し、実行する

app.py
import boto3

s3 = boto3.client("s3")

# 何らかの理由で操作権限が無いバケットなどがあるとき、バケット名を記載する
SKIP_BUCKET_NAMES = [
    "xxx",
]

def main():
    bucket_names = list_bucket_names()

    for bucket_name in bucket_names:
        if bucket_name in SKIP_BUCKET_NAMES:
            print(f"Skip: {bucket_name}")
            continue
        print(f"Put public access block: {bucket_name}")
        put_public_access_block(bucket_name)

def list_bucket_names() -> list[str]:
    resp = s3.list_buckets()

    return [bucket["Name"] for bucket in resp["Buckets"]]

def put_public_access_block(bucket_name: str):
    s3.put_public_access_block(
        Bucket=bucket_name,
        PublicAccessBlockConfiguration={
            "BlockPublicAcls": True,
            "IgnorePublicAcls": True,
            "BlockPublicPolicy": True,
            "RestrictPublicBuckets": True,
        },
    )

if __name__ == "__main__":
    main()

実行します。

python app.py

スクリプトの実行結果を確認する

S3バケットの設定

「パブリックアクセスをすべてブロック」になっていました。

11_s3_bucket

AWS Security Hub

約1日後、AWS Security Hubを確認するとすべてPASSになっていました。コントロールステータスも成功になっています。

21_security_hub

さいごに

S3バケットのブロックパブリックアクセスを設定するスクリプトを作成&実行してみました。
どなたかの参考になれば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.